home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / asm / mach-visws / do_timer.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  1KB  |  53 lines

  1. /* defines for inline arch setup functions */
  2.  
  3. #include <asm/fixmap.h>
  4. #include "cobalt.h"
  5.  
  6. static inline void do_timer_interrupt_hook(struct pt_regs *regs)
  7. {
  8.     /* Clear the interrupt */
  9.     co_cpu_write(CO_CPU_STAT,co_cpu_read(CO_CPU_STAT) & ~CO_STAT_TIMEINTR);
  10.  
  11.     do_timer(regs);
  12. #ifndef CONFIG_SMP
  13.     update_process_times(user_mode(regs));
  14. #endif
  15. /*
  16.  * In the SMP case we use the local APIC timer interrupt to do the
  17.  * profiling, except when we simulate SMP mode on a uniprocessor
  18.  * system, in that case we have to call the local interrupt handler.
  19.  */
  20. #ifndef CONFIG_X86_LOCAL_APIC
  21.     profile_tick(CPU_PROFILING, regs);
  22. #else
  23.     if (!using_apic_timer)
  24.         smp_local_timer_interrupt(regs);
  25. #endif
  26. }
  27.  
  28. static inline int do_timer_overflow(int count)
  29. {
  30.     int i;
  31.  
  32.     spin_lock(&i8259A_lock);
  33.     /*
  34.      * This is tricky when I/O APICs are used;
  35.      * see do_timer_interrupt().
  36.      */
  37.     i = inb(0x20);
  38.     spin_unlock(&i8259A_lock);
  39.     
  40.     /* assumption about timer being IRQ0 */
  41.     if (i & 0x01) {
  42.         /*
  43.          * We cannot detect lost timer interrupts ... 
  44.          * well, that's why we call them lost, don't we? :)
  45.          * [hmm, on the Pentium and Alpha we can ... sort of]
  46.          */
  47.         count -= LATCH;
  48.     } else {
  49.         printk("do_slow_gettimeoffset(): hardware timer problem?\n");
  50.     }
  51.     return count;
  52. }
  53.